//package com.cabinet.payinterface.controller;
//
//import com.cabinet.common.utils.RedisUtils;
//import com.cabinet.common.utils.StringUtils;
//import com.cabinet.common.utils.XmlUtils;
//import com.cabinet.modules.activity.service.ActivityOrderService;
//import com.cabinet.modules.advert.service.AdvertService;
//import com.cabinet.modules.api.service.CaseApiService;
//import com.cabinet.modules.api.service.MemberRechargeService;
//import com.cabinet.modules.card.service.MonthCardService;
//import com.cabinet.payinterface.utils.PaymentHelper;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.RequestMapping;
//
//import javax.annotation.Resource;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.BufferedReader;
//import java.io.InputStreamReader;
//import java.nio.charset.StandardCharsets;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.SortedMap;
//import java.util.TreeMap;
//
///**
// * @author xueyou
// * @date 2021/3/11
// */
//@Slf4j
//@Controller
//@RequestMapping("/notify/wx")
//public class WxPayNotifyController {
//
//    @Resource
//    private CaseApiService caseApiService;
//
//    @Resource
//    private ActivityOrderService activityOrderService;
//
//    @Resource
//    private MemberRechargeService memberRechargeService;
//
//    @Resource
//    AdvertService advertService;
//
//    @Resource
//    RedisUtils redisUtils;
//
//    @Resource
//    MonthCardService monthCardService;
//
//    /**
//     * 微信扫码开箱通知接口 适用于微信直连 扫码支付，公众号支付，小程序支付的结果通知
//     */
//    @RequestMapping(value = "/paynotify")
//    public void paynotify(HttpServletRequest request, HttpServletResponse response) {
//        log.info("*************** 微信支付通知START ****************");
//        try {
//            Map<String, String> resMap = XmlUtils.wxparseXml(request);
//            log.info("微信支付通知原文: [{}]", resMap);
//            caseApiService.openBoxPayNotify(PaymentHelper.wxnotifyConver(resMap));
//            SortedMap<String, String> returnMap = new TreeMap<>();
//            returnMap.put("return_code", "SUCCESS");
//            response.getWriter().write(XmlUtils.toXml(returnMap));
//        } catch (Exception e) {
//            log.error("微信支付通知处理异常: ", e);
//            try {
//                SortedMap<String, String> returnMap = new TreeMap<>();
//                returnMap.put("return_code", "FAIL");
//                response.getWriter().write(XmlUtils.toXml(returnMap));
//            } catch (Exception ex) {
//                log.error("微信支付响应微信端异常：", ex);
//            }
//        }
//    }
//
//    /**
//     * 活动支付通知接口
//     */
//    @RequestMapping(value = "/activityNotify")
//    public void activityNotify(HttpServletRequest request, HttpServletResponse response) {
//        log.info("*************** 微信支付通知(活动支付)START ****************");
//
//        try {
//            Map<String, String> resMap = XmlUtils.wxparseXml(request);
//            log.info("微信支付通知原文: [{}]", resMap);
//
//            //设置redis锁，防止支付提交
//            String outTradNo = resMap.get("out_trade_no");
//            String tradeNo = redisUtils.get(outTradNo);
//
//            if (StringUtils.isEmpty(tradeNo)) {
//                redisUtils.set(outTradNo, tradeNo, 60 * 60);
//                activityOrderService.activityPayComplete(PaymentHelper.wxnotifyConver(resMap));
//            }
//
//            SortedMap<String, String> returnMap = new TreeMap<>();
//            returnMap.put("return_code", "SUCCESS");
//            response.getWriter().write(XmlUtils.toXml(returnMap));
//        } catch (Exception e) {
//            log.error("微信支付通知处理异常: ", e);
//            try {
//                SortedMap<String, String> returnMap = new TreeMap<>();
//                returnMap.put("return_code", "FAIL");
//                response.getWriter().write(XmlUtils.toXml(returnMap));
//            } catch (Exception ex) {
//                log.error("微信支付响应微信端异常：", ex);
//            }
//        }
//    }
//
//
//    /**
//     * 广告支付支付通知接口
//     */
//    @RequestMapping(value = "/advertPayNotify")
//    public void advertPayNotify(HttpServletRequest request, HttpServletResponse response) {
//        log.info("*************** 微信支付通知(广告支付)START ****************");
//
//        try {
//            Map<String, String> resMap = XmlUtils.wxparseXml(request);
////            Map<String, String> resMap =new HashMap<>();
////            resMap.put("total_fee","1600");
////            resMap.put("transaction_id","123132");
////            resMap.put("out_trade_no","AD1631256119272VD296");
////            resMap.put("result_code","SUCCESS");
//            log.info("微信支付通知原文: [{}]", resMap);
//
//            //设置redis锁，防止支付提交
//            String outTradNo = resMap.get("out_trade_no");
//            String tradeNo = redisUtils.get(outTradNo);
//
//            if (StringUtils.isEmpty(tradeNo)) {
//                redisUtils.set(outTradNo, tradeNo, 60 * 60);
//                advertService.advertPayNotify(PaymentHelper.wxnotifyConver(resMap));
//            }
//
//            SortedMap<String, String> returnMap = new TreeMap<>();
//            returnMap.put("return_code", "SUCCESS");
//            response.getWriter().write(XmlUtils.toXml(returnMap));
//        } catch (Exception e) {
//            log.error("微信支付通知处理异常: ", e);
//            try {
//                SortedMap<String, String> returnMap = new TreeMap<>();
//                returnMap.put("return_code", "FAIL");
//                response.getWriter().write(XmlUtils.toXml(returnMap));
//            } catch (Exception ex) {
//                log.error("微信支付响应微信端异常：", ex);
//            }
//        }
//    }
//    /**
//     * 用户充值通知接口
//     */
//    @RequestMapping(value = "/rechargeNotify")
//    public void rechargeNotify(HttpServletRequest request, HttpServletResponse response) {
//        log.info("*************** 微信支付通知(用户充值)START ****************");
//
//        try {
//            Map<String, String> resMap = XmlUtils.wxparseXml(request);
//            log.info("微信支付通知原文: [{}]", resMap);
//
//            String tradeNo = redisUtils.get(resMap.get("out_trade_no") + "-recharge");
//            if (StringUtils.isEmpty(tradeNo)) {
//                redisUtils.set(resMap.get("out_trade_no") + "recharge", tradeNo);
//                memberRechargeService.rechargePayComplete(PaymentHelper.wxnotifyConver(resMap));
//            }
//
//            SortedMap<String, String> returnMap = new TreeMap<>();
//            returnMap.put("return_code", "SUCCESS");
//            response.getWriter().write(XmlUtils.toXml(returnMap));
//        } catch (Exception e) {
//            log.error("微信支付通知处理异常: ", e);
//            try {
//                SortedMap<String, String> returnMap = new TreeMap<>();
//                returnMap.put("return_code", "FAIL");
//                response.getWriter().write(XmlUtils.toXml(returnMap));
//            } catch (Exception ex) {
//                log.error("微信支付响应微信端异常：", ex);
//            }
//        }
//    }
//
//
//    /**
//     * 微信扫码开箱通知接口 适用于微信直连 扫码支付，公众号支付，小程序支付的结果通知
//     */
//    @RequestMapping(value = "/cardNotify")
//    public void cardNotify(HttpServletRequest request, HttpServletResponse response) {
//        log.info("*************** 微信支付通知【团卡购买】START ****************");
//        try {
//            Map<String, String> resMap = XmlUtils.wxparseXml(request);
//            log.info("微信支付通知原文: [{}]", resMap);
//            String tradeNo = redisUtils.get(resMap.get("out_trade_no") );
//            if (StringUtils.isEmpty(tradeNo)) {
//                redisUtils.set(resMap.get("out_trade_no") , tradeNo);
//                monthCardService.cardPayComplete(PaymentHelper.wxnotifyConver(resMap));
//            }
//            SortedMap<String, String> returnMap = new TreeMap<>();
//            returnMap.put("return_code", "SUCCESS");
//            response.getWriter().write(XmlUtils.toXml(returnMap));
//        } catch (Exception e) {
//            log.error("微信支付通知处理异常: ", e);
//            try {
//                SortedMap<String, String> returnMap = new TreeMap<>();
//                returnMap.put("return_code", "FAIL");
//                response.getWriter().write(XmlUtils.toXml(returnMap));
//            } catch (Exception ex) {
//                log.error("微信支付响应微信端异常：", ex);
//            }
//        }
//    }
//
//}
